package com.tarena.lbs.basic.controller;

import com.tarena.lbs.base.protocol.model.Result;
import com.tarena.lbs.basic.pojo.vo.AreaVO;
import com.tarena.lbs.basic.service.AreaService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;



//@Tag(name = "区域服务", description = "省市区三级联动服务")
//@RestController
//@Slf4j
//public class AreaController {
//
//    @Resource
//    private AreaService areaService;
//
//    /**
//     * 1. 查询所有省份（depth=1）
//     */
//    @Operation(summary = "查询所有省份")
//    @GetMapping("/admin/basic/area/provinces") // 路径更语义化
//    public Result<List<AreaVO>> getProvinces() {
//        try {
//            List<AreaVO> provinces = areaService.queryProvinces();
//            return new Result<>(provinces);
//        } catch (Exception e) {
//            log.error("查询省份失败", e);
//            return Result.fail("-1", "查询省份失败：" + e.getMessage());
//        }
//    }
//
//    /**
//     * 2. 根据省份ID查询城市（depth=2）
//     */
//    @Operation(summary = "根据省份ID查询城市")
//    @GetMapping("/admin/basic/area/cities")
//    public Result<List<AreaVO>> getCities(@RequestParam Long provinceId) {
//        try {
//            // 校验省份ID合法性（可选，增强健壮性）
//            if (provinceId == null) {
//                return Result.fail("-2", "省份ID不能为空");
//            }
//            List<AreaVO> cities = areaService.queryChildren(provinceId);
//            return new Result<>(cities);
//        } catch (Exception e) {
//            log.error("查询城市失败，provinceId={}", provinceId, e);
//            return Result.fail("-1", "查询城市失败：" + e.getMessage());
//        }
//    }
//
//    /**
//     * 3. 根据城市ID查询区县（depth=3）
//     */
//    @Operation(summary = "根据城市ID查询区县")
//    @GetMapping("/admin/basic/area/districts")
//    public Result<List<AreaVO>> getDistricts(@RequestParam Long cityId) {
//        try {
//            if (cityId == null) {
//                return Result.fail("-2", "城市ID不能为空");
//            }
//            List<AreaVO> districts = areaService.queryChildren(cityId);
//            return new Result<>(districts);
//        } catch (Exception e) {
//            log.error("查询区县失败，cityId={}", cityId, e);
//            return Result.fail("-1", "查询区县失败：" + e.getMessage());
//        }
//    }
//
//    /**
//     * 4. 保留完整树形结构查询（用于一次性加载全量数据）
//     */
//    @Operation(summary = "查询省市区树形结构")
//    @GetMapping("/admin/basic/area/tree")
//    public Result<List<AreaVO>> getAreaTree() {
//        try {
//            List<AreaVO> tree = areaService.queryAreaTree();
//            return new Result<>(tree);
//        } catch (Exception e) {
//            log.error("查询树形结构失败", e);
//            return Result.fail("-1", "查询树形结构失败：" + e.getMessage());
//        }
//    }
//}

/**
 * 处理区域 地市数据业务的接口类
 */
@Tag(name = "区域服务", description = "区域服务")
@RestController
@Slf4j
public class AreaController {


    @Resource
    private AreaService areaService;

    /**
     * 查询所有省级地区列表（适配前端路径）
     */
    @Operation(summary = "查询省级地区列表")
    @GetMapping("/admin/basic/area/list")
    public Result<List<AreaVO>> queryProvinces() {
        try {
            List<AreaVO> provinces = areaService.queryProvinces();
            log.info("查询省级地区成功，共{}条数据", provinces.size());
            return new Result<>(provinces); // 成功响应（默认code=0）
        } catch (Exception e) {
            log.error("查询省级地区失败", e);
            return Result.fail("-1", "查询失败：" + e.getMessage());
        }
    }

    /**
     * 根据父ID查询子级地区列表（城市/区县）
     * 同时支持pathVariable和requestParam两种参数传递方式
     */
    @Operation(summary = "查询子级地区列表（城市/区县）")
    @GetMapping(value = {"/admin/basic/area/{parentId}/children", "/admin/basic/area/city/list"})
    public Result<List<AreaVO>> queryChildren(
            @PathVariable(value = "parentId", required = false) Long parentId,
            @RequestParam(value = "provinceId", required = false) Long provinceId,
            @RequestParam(value = "cityId", required = false) Long cityId) {

        // 确定实际的父ID（优先级：path变量 > 请求参数）
        Long actualParentId = parentId;
        if (actualParentId == null) {
            actualParentId = provinceId != null ? provinceId : cityId;
        }
        try {
            List<AreaVO> children = areaService.queryChildren(actualParentId);
            log.info("查询父ID={}的子级地区成功，共{}条数据", actualParentId, children.size());
            return new Result<>(children);
        } catch (Exception e) {
            log.error("查询父ID={}的子级地区失败", actualParentId, e);
            return Result.fail("-1", "查询失败：" + e.getMessage());
        }
    }

    /**
     * 查询省市区树形结构
     */
    @Operation(summary = "查询省市区树形结构")
    @GetMapping("/admin/basic/area/tree")
    public Result<List<AreaVO>> tree() {
        try {
            List<AreaVO> areaTree = areaService.queryAreaTree();
            log.info("查询省市区树形结构成功");
            return new Result<>(areaTree);
        } catch (Exception e) {
            log.error("查询省市区树形结构失败", e);
            return Result.fail("-1", "查询失败：" + e.getMessage());
        }
    }
}